package com.itlong.cloud.enumerate;

import com.fasterxml.jackson.annotation.JsonCreator;

import java.util.Objects;

/**
 * <desc>
 *      与旺龙一卡通对接-数据类型
 * </desc>
 *
 * @createDate 2017-11-08
 */
public enum SmartCardSyncDataTypeEnum {


    USER_BASIS_DATA("用户基本信息", 1),  //rabbitMQ生产的data List<userId>,
    USER_HOUSE_DATA("住户房间地址信息", 2),  //暂未实现
    USER_AUTH_DATA("用户设备权限信息", 3),
    ADDRESS_DATA("地址信息", 4),//暂未实现
    EQUIP_DATA("设备信息", 5),
    FLOOR_RELATION_DATA("楼层映射信息", 6),
    PASS_RECORD_DATA("通行记录信息", 7),


    UNKOWNTYPE("未知数据类型", -1),                //未知数据类型
    ;
    private String description;
    private Integer type;

    /**
     * <desc>
     *     	反序列化时的 初始化函数，入参为 对应该枚举的 json值
     * </desc>
     * @param description
     * @return
     * @author Jiaqi.X
     * @createDate 2017/12/22
     */
    @JsonCreator
    public static SmartCardSyncDataTypeEnum getItem(String description){
        for(SmartCardSyncDataTypeEnum item : values()){
            if(item.getType().equals(description)){
                return item;
            }
        }
        return Enum.valueOf(SmartCardSyncDataTypeEnum.class,description);
    }

    /**
     * <desc>
     *      App用户项目-是否允许电话呼叫枚举无参构造函数
     * </desc>
     * @param
     * @return
     * @author zhangs
     * @createDate 2017/09/22
     */
    SmartCardSyncDataTypeEnum() {
    }

    /**
     * <desc>
     *      App用户项目-是否允许电话呼叫枚举描述与类型构造函数
     * </desc>
     * @param description 描述
     * @param type 类型
     * @return
     * @author zhangs
     * @createDate 2017/09/22
     */
    SmartCardSyncDataTypeEnum(String description, Integer type) {
        this.description = description;
        this.type = type;
    }

    /**
     * <desc>
     *      获取App用户项目-是否允许电话呼叫枚举描述
     * </desc>
     * @param
     * @return String
     * @author zhangs
     * @createDate 2017/09/22
     */
    public String getDescription() {
        return description;
    }

    /**
     * <desc>
     *      获取App用户项目-是否允许电话呼叫枚举类型
     * </desc>
     * @param
     * @return Integer
     * @author zhangs
     * @createDate 2017/09/22
     */
    public Integer getType() {
        return type;
    }

    /**
     * <desc>
     *      获取枚举的描述
     * </desc>
     * @param type 枚举类型
     * @return 枚举描述
     * @author zhangs
     * @createDate 2017/09/22
     */
    public static String getDescription(Integer type){
        SmartCardSyncDataTypeEnum[] types = SmartCardSyncDataTypeEnum.values();
        for(SmartCardSyncDataTypeEnum limitCategory : types ){
            if(Objects.equals(limitCategory.getType(), type)){
                return limitCategory.getDescription();
            }
        }
        return null;
    }

    /**
     * <desc>
     *      获取枚举
     * </desc>
     * @param type 枚举类型
     * @return 枚举
     * @author zhangs
     * @createDate 2017/09/22
     */
    public static SmartCardSyncDataTypeEnum getByType(Integer type){
        SmartCardSyncDataTypeEnum[] types = SmartCardSyncDataTypeEnum.values();
        for(SmartCardSyncDataTypeEnum limitCategory : values() ){
            if(Objects.equals(limitCategory.getType(), type)){
                return limitCategory;
            }
        }
        return UNKOWNTYPE;
    }
}
